tcpdump简介
tcpdump是一款 Linux 平台的抓包工具。它可以抓取涵盖整个 TCP/IP 协议族的数据包,支持针对网络层、协议、主机、端口的过滤,并提供 and、or、not 等逻辑语句来过滤无用的信息
安装tcpdump:
1 | # yum -y install tcpdump |
tcpdump命令格式
tcpdump 常用选项
1 | -D 列出操作系统所有可以用于抓包的接口 |
tcpdump 过滤器
1 | proto:可选有 ip、arp、rarp、tcp、udp、icmp、ether 等,默认是所有协议的包 |
表达式单元之间可以使用操作符” and(&&) 、 or(||)、not(!) “进行连接,使用括号”()”可以改变表达式的优先级,但需要注意的是括号会被shell解释,所以应该使用反斜线””转义为”()”
特别要记住在使用 && 的时候,要用单引号或者双引号包住表达式
使用 tcpdump 的常用选项
不转换主机名、端口号等
1
# tcpdump -nn
显示详细信息
1
2
3# tcpdump -v
# tcpdump -vv
# tcpdump -vvv
每增加一个 -v 标记,输出会包含更多信息
- 指定网络接口
1
2# tcpdump -i ens33
# tcpdump -i any
如果不指定网络接口, tcpdump 在运行时会选择编号最低的网络接口
any 这一特定的网络接口名用来让 tcpdump 监听所有的接口
指定抓包数量
1
# tcpdump -c 10
指定抓包大小
1
# tcpdump -s 100
写入文件
1
# tcpdump -w /var/tmp/tcpdata.pcap
读取文件
1
# tcpdump -r /var/tmp/tcpdata.pcap
也可以利用 wireshark 来读取 tcpdump 保存的文件
- 组合使用
1
# tcpdump -nnvvv -i any -c 100 -s 100
使用 tcpdump 的过滤器
tcpdump 可以通过各式各样的表达式,来过滤所截取或者输出的数据
- 查找特定主机的数据包
1
# tcpdump -nvvv -i any -c 3 host 10.0.3.1
只会显示源 IP 或者目的 IP 地址是 10.0.3.1 的数据包
只显示源地址为特定主机的数据包
1
# tcpdump -nvvv -i any -c 3 src host 10.0.3.1
过滤源和目的端口
1
# tcpdump -nvvv -i any -c 3 port 22 and port 60738
tcpdump 只输出端口号是 22 和 60738 的数据包
- 查找两个端口号的数据包
1
# tcpdump -nvvv -i any -c 20 'port 80 or port 443'
端口号 80 表示 http 连接,443 表示 https
查找两个特定端口和来自特定主机的数据包
1
# tcpdump -nvvv -i any -c 20 '(port 80 or port 443) and host 10.0.3.169'
查找某协议的数据包
1
# tcpdump -nnvvv -i any tcp
tcpdump 的输出格式
一般格式
1 | 系统时间 源主机.端口 > 目标主机.端口 数据包参数 |
示例
1 | # tcpdump -n -i any -c 1 host 10.0.0.210 |
可以按照 src-ip.src-port > dest-ip.dest-port: Flags[S] 格式来分析。源地址位于 > 前面,后面则是目的地址
通过 Flags[S] 可以判断数据包类型